﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using RN.ERP.Web.ModelService;
using Newtonsoft.Json;
using Fly.Common.Linq;
using Fly.Common.WorkFlow;
using Telerik.Web.UI;
using Telerik.Web.UI.Skins;
using System.Configuration;

namespace RN.ERP.Web.Enterprise
{
    public partial class EnterpriseCorpListForCerts : BasePage
    {
        protected string AreaCode
        {
            get
            {
                return UserInfo.CurrentArea;
            }
        }

        protected string UserArea
        {
            get
            {
                return UserInfo.AreaCode;
            }
        }

        protected string RoleId
        {
            get
            {
                return UserInfo.RoleId;
            }
        }

        protected int GroupID
        {
            get
            {
                int groupid = -1;
                if (Request.QueryString["groupId"] != null)
                {
                    int.TryParse(Request.QueryString["groupId"].Trim(), out groupid);
                }
                return groupid;
            }
        }

        private EnterpriseService.EnterpriseServiceClient enterpriseServiceClient = new EnterpriseService.EnterpriseServiceClient();
        private BasicService.BasicServiceClient basicServiceClient = new BasicService.BasicServiceClient();
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                hdnClassID.Value = Request["classId"];
                InitStatisticsCondition();
                BindDDLArea();
                BindFlowCode();
            }
        }

        /// <summary>
        /// 客户端grid刷新
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void RadAjaxManager1_AjaxRequest(object sender, AjaxRequestEventArgs e)
        {
            if (e.Argument == "Rebind")
            {
                ListCorps.MasterTableView.SortExpressions.Clear();
                ListCorps.MasterTableView.GroupByExpressions.Clear();
                ListCorps.Rebind();
            }

        }
        protected void ListCorps_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
        {
            string ClassId = Request.QueryString["classId"];
            var queryCondition = hdnCondition.Value;
            if (string.IsNullOrEmpty(queryCondition))
            {
                queryCondition = GetCondition();
            }
            int cnt = 0;
            
            if (hdnIsPost.Value.Equals("1"))////是职称人员
            {
                var corp = enterpriseServiceClient.GetCorpPostInfoList(out cnt, queryCondition, ListCorps.PageSize, ListCorps.CurrentPageIndex + 1, UserInfo.CurrentArea, GroupID);
                var corpInfo = JsonConvert.DeserializeObject<IList<CompanyInfo>>(corp);
                ListCorps.AllowCustomPaging = true;
                ListCorps.VirtualItemCount = cnt;
                ListCorps.DataSource = corpInfo;
            }
            else
            {
                var corp = enterpriseServiceClient.GetCorpListByGroupID(out cnt, queryCondition, ListCorps.PageSize, ListCorps.CurrentPageIndex + 1, UserInfo.CurrentArea, GroupID);
                var corpInfo = JsonConvert.DeserializeObject<IList<CompanyInfo>>(corp);
                ListCorps.AllowCustomPaging = true;
                ListCorps.VirtualItemCount = cnt;
                ListCorps.DataSource = corpInfo;
            }
        }


        protected string GetCorpClassKind(string type)
        {
            string output = string.Empty;
            if (!String.IsNullOrEmpty(type))
            {
                Dictionary<string, string> CorpTypeDic = JsonConvert.DeserializeObject<Dictionary<string, string>>
                    (Application[ApplicationConstant.APPLICATION_CORPUSERTYPE].ToString());
                try
                {
                    output = CorpTypeDic[type];
                }
                catch
                {
                    output = "";
                }
            }
            return output;
        }

        protected string GetCorpKindByClassId(string type)
        {
            string output = string.Empty;
            if (!String.IsNullOrEmpty(type))
            {
                Dictionary<string, string> CorpTypeDic =new Dictionary<string,string>();
                CorpTypeDic.Add("2501", "施工企业");
                CorpTypeDic.Add("2506", "装饰企业");
                CorpTypeDic.Add("30", "商砼企业");
                CorpTypeDic.Add("2301", "门窗企业");
                try
                {
                    output = CorpTypeDic[type];
                }
                catch
                {
                    output = "";
                }
            }
            return output;
        }

        private string GetCondition()
        {
            List<QueryCompanyInfoCondition> queryCompanyInfoList = new List<QueryCompanyInfoCondition>();
            QueryCompanyInfoCondition queryCompanyInfoCondition = new QueryCompanyInfoCondition();
            string classId = Request.QueryString["classId"];
            if (string.IsNullOrEmpty(classId))
            {
                if (ddlClass.SelectedValue != "-1")
                {
                    classId = ddlClass.SelectedValue;
                }
            }
            string corpName = txtCorpName.Text.Trim();
            List<string> listFlow = GetFlowCodes();
            if (listFlow.Count > 0)
            {
                foreach (var flow in listFlow)
                {
                    QueryCompanyInfoCondition con = new QueryCompanyInfoCondition();
                    int clsId = -1;
                    if (!string.IsNullOrEmpty(classId) && int.TryParse(classId, out clsId))
                    {
                        con.classID = new ParameterValue<int?>() { O = OptEnum.Equal, V = clsId };
                    }
                    if (!string.IsNullOrEmpty(corpName))
                    {
                        con.CorpName = new ParameterValue<string>() { O = OptEnum.Like, V = corpName };
                    }
                    ////解决烟台地区查看外地企业需求,这里说是地区号换字段了，但是前台获取不到变更后的字段，暂时还取以前的账号 2014-01-02 毛凯
                    if (UserInfo.AreaCode.Length >= 4)
                    {
                        con.AreaCode = new ParameterValue<string>() { O = OptEnum.StartWith, V = UserInfo.AreaCode };
                    }
                    else
                    {
                        string area = ddlArea.SelectedValue.Trim();
                        if (area != "-1")
                        {
                            con.AreaCode = new ParameterValue<string>() { O = OptEnum.StartWith, V = area };
                        }
                    }
                    con.FlowCode = new ParameterValue<string>() { O = OptEnum.Equal, V = flow };
                    queryCompanyInfoList.Add(con);
                }
            }
            else
            {
                int clsId = -1;
                if (!string.IsNullOrEmpty(classId) && int.TryParse(classId, out clsId))
                {
                    queryCompanyInfoCondition.classID = new ParameterValue<int?>() { O = OptEnum.Equal, V = clsId };
                }
                if (!string.IsNullOrEmpty(corpName))
                {
                    queryCompanyInfoCondition.CorpName = new ParameterValue<string>() { O = OptEnum.Like, V = corpName };
                }
                queryCompanyInfoCondition.FlowCode = new ParameterValue<string>() { O = OptEnum.Like, V = "019" };
                ////解决烟台地区查看外地企业需求,这里说是地区号换字段了，但是前台获取不到变更后的字段，暂时还取以前的账号 2014-01-02 毛凯
                if (UserInfo.AreaCode.Length >= 4)
                {
                    queryCompanyInfoCondition.AreaCode = new ParameterValue<string>() { O = OptEnum.StartWith, V = UserInfo.AreaCode };
                    string area = ddlArea.SelectedValue.Trim();
                }
                else
                {
                    string area = ddlArea.SelectedValue.Trim();
                    if (area != "-1")
                    {
                        queryCompanyInfoCondition.AreaCode = new ParameterValue<string>() { O = OptEnum.StartWith, V = area };
                    }
                }
                queryCompanyInfoList.Add(queryCompanyInfoCondition);
            }
            return JsonConvert.SerializeObject(queryCompanyInfoList);
        }

        private void InitStatisticsCondition()
        {
            ////是否是职称人员
            if (!string.IsNullOrEmpty(Request.QueryString["ispost"]))
            {
                string isPost = Request.QueryString["ispost"];
                if (isPost.Equals("1"))
                {
                    hdnIsPost.Value = isPost;
                }
                else if (isPost.Equals("0"))
                {
                    hdnIsPost.Value = isPost;
                }
            }
            string statistics = Request.QueryString["statistics"];
            if (!string.IsNullOrEmpty(statistics) && statistics == "1")
            {
                string flowcode = Request.QueryString["flowcode"];
                flowcode = Server.UrlDecode(flowcode);
                List<QueryCompanyInfoCondition> conditionList = new List<QueryCompanyInfoCondition>();
                if (string.IsNullOrEmpty(flowcode))
                {
                    var con = CreateCommonCompanyCondition();
                    con.FlowCode = new ParameterValue<string>() { O = OptEnum.Like, V = "019" };
                    conditionList.Add(con);
                }
                else
                {
                    string[] flows = flowcode.Split('|');
                    foreach (string f in flows)
                    {
                        var con = CreateCommonCompanyCondition();
                        con.FlowCode = new ParameterValue<string>() { O = OptEnum.Equal, V = f };
                        conditionList.Add(con);
                    }
                }
                hdnCondition.Value = JsonConvert.SerializeObject(conditionList);
            }
        }

        private QueryCompanyInfoCondition CreateCommonCompanyCondition()
        {
            string areaCode = Request.QueryString["areacode"].Trim();
            string classid = Request.QueryString["classid"];
            QueryCompanyInfoCondition con = new QueryCompanyInfoCondition();
            if (!string.IsNullOrEmpty(areaCode))
            {
                if (areaCode.EndsWith("99"))
                {
                    con.AreaCode = new ParameterValue<string>() { O = OptEnum.NotStartWith, V = UserInfo.CurrentArea };
                }
                else
                {
                    con.AreaCode = new ParameterValue<string>() { O = OptEnum.StartWith, V = areaCode };
                }
            }
            else
            {
                con.AreaCode = new ParameterValue<string>() { O = OptEnum.StartWith, V = UserInfo.AreaCode };
            }
            if (!string.IsNullOrEmpty(classid))
            {
                int clsId = 0;
                int.TryParse(classid, out clsId);
                con.classID = new ParameterValue<int?>() { O = OptEnum.Equal, V = clsId };
            }
            return con;
        }

        private List<string> GetFlowCodes()
        {
            string flowCode = ddlStatus.SelectedValue;
            List<string> listFlow = new List<string>();
            foreach (var f in flowCode.Split('|'))
            {
                if (!string.IsNullOrEmpty(f))
                {
                    listFlow.Add(f);
                }
            }
            return listFlow;
        }

        private void BindFlowCode()
        {
            string classid = Request.QueryString["classid"];
            ddlStatus.Items.Insert(0, new ListItem("全部", ""));
        }

        private void BindDDLArea()
        {
            var areaDic = JsonConvert.DeserializeObject<List<a_AreaSubInfo>>(basicServiceClient.GetQu("14"));
            ddlArea.DataSource = areaDic.ToDictionary(o => o.SortCode, o => o.Title);
            ddlArea.DataValueField = "Key";
            ddlArea.DataTextField = "Value";
            ddlArea.DataBind();
            ddlArea.Items.Insert(0, new ListItem("全部","-1"));
        }
    }
}
